importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_moment.js
//@include lib_sol.common.DateUtils.js
//@include lib_sol.common.Config.js
//@include lib_sol.common.Template.js
//@include lib_sol.common.WfUtils.js
//@include lib_sol.common.JsonUtils.js
//@include lib_sol.common.ExceptionUtils.js
//@include lib_sol.common.ix.RfUtils.js
//@include lib_sol.common.ix.FunctionBase.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.SetPrivacyFields" });
/**
* Sets the privacy fields
*
* Since ELO 11 there are the privacy fields `ELO_PERSONALDATA_UID` and `ELO_PERSONALDATA_DELETEAT`.
*
* In the field `ELO_PERSONALDATA_UID` a privacy reference, e.g. the name, can be entered. Templating is used for this.
* The corresponding template can be defined in `personalDataUidTplString`.
*
* A deletion date can be entered in the privacy field `ELO_PERSONALDATA_DELETEAT`. This date is calculated from the `baseDateFields`
* and the deletion period. The latest date is used.
*
* # As workflow node
*
* ## Example
*
* {
* "personalReference": {
* "mode": "SET",
* "template": "{{{sord.objKeys.VISITOR_FIRSTNAME}}} {{{sord.objKeys.VISITOR_LASTNAME}}}"
* },
* "deletionDate": {
* "mode": "SET",
* "baseDateFields": [{ "type": "GRP", "key": "VISITOR_DEPARTUREDATE" }, { "type": "GRP", "key": "VISITOR_STARTDATE" }],
* "deletionPeriodNumber": 4,
* "deletionPeriodUnit": "w"
* }
* }
*
*
* @author ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @requires moment
* @requires sol.common.DateUtils
* @requires sol.common.Config
* @requires sol.common.Template
* @requires sol.common.WfUtils
* @requires sol.common.JsonUtils
* @requires sol.common.ExceptionUtils
* @requires sol.common.ix.RfUtils
* @requires sol.common.ix.FunctionBase
*/
sol.define("sol.common.ix.functions.SetPrivacyFields", {
extend: "sol.common.ix.FunctionBase",
/**
* @cfg {Object} personalReference
* Configuration for setting the person reference
*/
/**
* @cfg {String} [personalReference.mode=SET]
* Mode of processing the setting of the personal reference, e.g. `SET` or `DELETE`
*/
/**
* @cfg {String} personalReference.template
* Personal reference template string, e.g. `{{{sord.objKeys.VISITOR_FIRSTNAME}}} {{{sord.objKeys.VISITOR_LASTNAME}}}`.
* The result is written in the privacy field `ELO_PERSONALDATA_UID`.
*/
/**
* @cfg {Object} deletionDate
* Configuration for setting the deletion date
*/
/**
* @cfg {String} [deletionDate.mode=SET]
* Mode of processing the setting of the deletion date, e.g. `SET` or `DELETE`
*/
/**
* @cfg {Array} deletionDate.baseDateFields, e.g. `[{ "type": "GRP", "key": "VISITOR_DEPARTUREDATE" }, { "type": "GRP", "key": "VISITOR_STARTDATE" }]`
* Base date fields for calculating the deletion date. The latest date is used for calculation.
*/
/**
* @cfg {Number} [deletionDate.deletionPeriodNumber=4]
* Deletion period number
* The latest base date plus the deletion period results in the deletion date.
*/
/**
* @cfg {String} [deletionDate.deletionPeriodUnit=week]
* Deletion period unit
* The latest base date plus the deletion period results in the deletion date.
*/
initialize: function (config) {
var me = this;
me.$super("sol.common.ix.FunctionBase", "initialize", [config]);
},
process: function () {
var me = this,
deletionPeriod = {},
baseDateIso = "",
sordChanged = false,
sord, deletionMoment, deletionDateIso, personalDataUidTpl, personalDataUid,
i, baseDateField, currentBaseDateIso, tplSord;
if (!sol.common.SordUtils.hiddenLineExists("NAME_PERSONALDATA_DELETEAT")) {
me.logger.debug(["Privacy fields do not exist. Can not set privacy fields. ix.majorVerion={0}", ixConnect.majorVersion + ""]);
return;
}
if (me.personalReference) {
me.personalReference.mode = me.personalReference.mode || "SET";
sord = sol.common.RepoUtils.getSord(me.objId);
if (me.personalReference.mode == "DELETE") {
personalDataUid = "";
} else {
tplSord = sol.common.SordUtils.getTemplateSord(sord);
personalDataUidTpl = sol.create("sol.common.Template", { source: me.personalReference.template });
personalDataUid = personalDataUidTpl.apply(tplSord);
}
me.logger.debug(["Set privacy field 'ELO_PERSONALDATA_UID': mode={0}, objId={1}, sord.name={2}, personalDataUid={3}", me.personalReference.mode, me.objId, sord.name, personalDataUid]);
sordChanged = true;
sol.common.SordUtils.setObjKeyValue(sord, "ELO_PERSONALDATA_UID", personalDataUid, { silent: true });
}
if (me.deletionDate) {
me.deletionDate.mode = me.deletionDate.mode || "SET";
if (me.deletionDate.mode == "DELETE") {
deletionDateIso = "";
} else {
me.deletionDate.deletionPeriodNumber = me.deletionDate.deletionPeriod || 4;
me.deletionDate.deletionPeriodUnit = me.deletionDate.deletionPeriodUnit || "weeks";
sord = sord || sol.common.RepoUtils.getSord(me.objId);
deletionPeriod[me.deletionDate.deletionPeriodUnit] = me.deletionDate.deletionPeriodNumber;
me.deletionDate.baseDateFields = me.deletionDate.baseDateFields || [];
for (i = 0; i < me.deletionDate.baseDateFields.length; i++) {
baseDateField = me.deletionDate.baseDateFields[i];
currentBaseDateIso = sol.common.SordUtils.getValue(sord, baseDateField);
if (!currentBaseDateIso) {
continue;
}
currentBaseDateIso = sol.common.StringUtils.padRight(currentBaseDateIso, 14, "0");
if (currentBaseDateIso > baseDateIso) {
baseDateIso = currentBaseDateIso;
}
}
if (baseDateIso) {
deletionMoment = sol.common.DateUtils.isoToMoment(baseDateIso, { startOfDay: true });
} else {
deletionMoment = new moment();
}
deletionMoment.add(deletionPeriod);
deletionDateIso = sol.common.DateUtils.momentToIso(deletionMoment, { startOfDay: true });
}
me.logger.debug(["Set privacy field 'ELO_PERSONALDATA_DELETEAT': mode={0}, objId={1}, sord.name={2}, deletionDate={3}", me.deletionDate.mode, me.objId, sord.name, deletionDateIso]);
sordChanged = true;
sol.common.SordUtils.setObjKeyValue(sord, "ELO_PERSONALDATA_DELETEAT", deletionDateIso, { silent: true });
}
if (sordChanged) {
ixConnect.ix().checkinSord(sord, SordC.mbAllIndex, LockC.NO);
}
}
});
/**
* @member sol.common.ix.functions.SetPrivacyFields
* @static
* @inheritdoc sol.common.ix.FunctionBase#onEnterNode
*/
function onEnterNode(clInfo, userId, wfDiagram, nodeId) {
var module, params;
logger.enter("onEnterNode_SetPrivacyFields", { flowId: wfDiagram.id, nodeId: nodeId });
params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId);
params.wfDiagram = wfDiagram;
params.objId = wfDiagram.objId;
params.flowId = wfDiagram.id;
params.nodeId = nodeId;
sol.common.WfUtils.checkMainAdminWf(wfDiagram);
module = sol.create("sol.common.ix.functions.SetPrivacyFields", params);
module.process();
logger.exit("onEnterNode_SetPrivacyFields");
}
/**
* @member sol.common.ix.functions.SetPrivacyFields
* @static
* @inheritdoc sol.common.ix.FunctionBase#onExitNode
*/
function onExitNode(ci, userId, wfDiagram, nodeId) {
var module, params;
logger.enter("onExitNode_SetPrivacyFields", { flowId: wfDiagram.id, nodeId: nodeId });
params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId);
params.wfDiagram = wfDiagram;
params.objId = wfDiagram.objId;
params.flowId = wfDiagram.id;
params.nodeId = nodeId;
sol.common.WfUtils.checkMainAdminWf(wfDiagram);
module = sol.create("sol.common.ix.functions.SetPrivacyFields", params);
module.process();
logger.exit("onExitNode_SetPrivacyFields");
}
/**
* @member sol.common.ix.functions.SetPrivacyFields
* @method RF_sol_function_SetPrivacyFields
* @static
* @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName
*/
function RF_sol_function_SetPrivacyFields(ec, configAny) {
var module, params, result;
logger.enter("RF_sol_function_SetPrivacyFields", configAny);
params = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, configAny);
sol.common.ix.RfUtils.checkMainAdminRights(ec.user, params);
module = sol.create("sol.common.ix.functions.SetPrivacyFields", params);
result = module.process();
logger.exit("RF_sol_function_SetPrivacyFields");
return result;
}